Alex Liang

[Rails] 使用i18n轉換中文詞彙

網站的頁面需要提供下拉式選單供使用者選擇星期幾
一開始使用Date::DAYNAMES取得一週的詞彙:

app/views/posts/_form.html.erb
1
2
3
4
5
6
<%= simple_form_for @post do |f| %>
...略
<p>
球聚時間:每週 <%= f.select :day, Date::DAYNAMES.zip((0..6).to_a) %>
</p>
<% end %>

然而預設為英文單字

1
=> [["Sunday", 0], ["Monday", 1], ["Tuesday", 2], ["Wednesday", 3], ["Thursday", 4], ["Friday", 5], ["Saturday", 6]]

我們想改成中文顯示,於是使用i18n轉換字詞

首先,在config/locales下新增一個zh-TW.yml檔,裡面建立中文的對應單字

config/locales/zh-TW.yml
1
2
3
4
5
6
7
8
9
10
"zh-TW":
date:
day_names:
- 星期日
- 星期一
- 星期二
- 星期三
- 星期四
- 星期五
- 星期六

要特別注意的是yml檔裡不能用tab來縮排,必需使用2個空白

接著設定config

config/application.rb
1
config.i18n.default_locale = 'zh-TW'

修改原來的view,即可轉換選單的英文字詞

app/views/posts/_form.html.erb
1
2
3
4
5
6
<%= simple_form_for @post do |f| %>
...略
<p>
球聚時間:每週 <%= f.select :day, t(:"date.day_names").zip((0..6).to_a) %>
</p>
<% end %>

參考來源:
“How to store and display a day of the week” from Stack Overflow
ihower介紹i118n
設定yml檔 from Stack Overflow